#include<map>
#include<set>
#include<cmath>
#include<ctime>
#include<queue>
#include<stack>
#include<cstdio>
#include<vector>
#include<string>
#include<bitset>
#include<numeric>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN=4e5+10;
const int N=4e5;
const int INF=0x3f3f3f3f;
const long long LINF=0x3f3f3f3f3f3f3f3f;
int n;
long long sum=0;
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/hash_policy.hpp>
struct splitmix64{
	inline int operator ()(int x)const{
		x^=x<<13;
		x^=x>>11;
		x^=x<<7;
		return x;
	}
};
__gnu_pbds::gp_hash_table <int,bool,splitmix64> vis;
namespace trie{
	const int MAXS=N*35+100;
	int idx=1;
	int tr[MAXS][2];
	#define ls(x) tr[x][0]
	#define rs(x) tr[x][1]
	int siz[MAXS];
	long long sum[MAXS],pre[MAXS],suf[MAXS];
	inline int size(){
		return siz[1];
	}
	inline void push_up(int x){
		pre[x]=pre[ls(x)]+pre[rs(x)]+sum[ls(x)]*siz[rs(x)];
		suf[x]=suf[ls(x)]+suf[rs(x)]+sum[rs(x)]*siz[ls(x)];
	}
	inline void upd(basic_string <int> pth){
		int x=pth.back();
		pth.pop_back();
		pre[x]=sum[x];
		suf[x]=sum[x];
		reverse(pth.begin(),pth.end());
		for(int p:pth)
		{
			push_up(p);
		}
	}
	inline void ins(long long v){
		basic_string <int> pth;
		int x=1;
		sum[x]+=v;
		siz[x]++;
		pth.push_back(x);
		for(int i=39;~i;i--)
		{
			bool c=v&(1ll<<i);
			if(!tr[x][c]){
				idx++;
				tr[x][c]=idx;
			}
			x=tr[x][c];
			sum[x]+=v;
			siz[x]++;
			pth.push_back(x);
		}
		upd(pth);
	}
	inline void ers(long long v){
		basic_string <int> pth;
		int x=1;
		sum[x]-=v;
		siz[x]--;
		pth.push_back(x);
		for(int i=39;~i;i--)
		{
			bool c=v&(1ll<<i);
			x=tr[x][c];
			sum[x]-=v;
			siz[x]--;
			pth.push_back(x);
		}
		upd(pth);
	}
	inline long long sum_pre(int k){
		int x=1;
		long long res=0;
		for(int i=39;~i;i--)
		{
			if(ls(x)&&siz[ls(x)]>=k){
				x=ls(x);
			}
			else{
				k-=siz[ls(x)];
				res+=sum[ls(x)];
				x=rs(x);
			}
		}
		res+=sum[x];
		return res;
	}
	inline long long sum_suf(int k){
		int x=1;
		long long res=0;
		for(int i=39;~i;i--)
		{
			if(rs(x)&&siz[rs(x)]>=k){
				x=rs(x);
			}
			else{
				k-=siz[rs(x)];
				res+=sum[rs(x)];
				x=ls(x);
			}
		}
		res+=sum[x];
		return res;
	}
	inline long long spre(int k){
		if(!k){
			return 0;
		}
		int x=1,t=k;
		long long res=0;
		int bas=0;
		for(int i=39;~i;i--)
		{
			if(ls(x)&&siz[ls(x)]>=k){
				x=ls(x);
			}
			else{
				k-=siz[ls(x)];
				bas+=siz[ls(x)];
				res+=pre[ls(x)]+sum[ls(x)]*(t-bas);
				x=rs(x);
			}
		}
		res+=sum[x];
		return res;
	}
	inline long long ssuf(int k){
		if(!k){
			return 0;
		}
		int x=1,t=k;
		long long res=0;
		int bas=0;
		for(int i=39;~i;i--)
		{
			if(rs(x)&&siz[rs(x)]>=k){
				x=rs(x);
			}
			else{
				k-=siz[rs(x)];
				bas+=siz[rs(x)];
				res+=suf[rs(x)]+sum[rs(x)]*(t-bas);
				x=ls(x);
			}
		}
		res+=sum[x];
		return res;
	}
}
#define m trie::size()
#define f(x) trie::sum_pre((x)+1)
#define g(x) trie::sum_suf(x)
inline long long qry(int l,int r){
	return (trie::spre(r+1)-trie::spre(l))-(trie::ssuf(r)-trie::ssuf(l-1));
}
inline long long calc(){
	long long res=trie::sum_suf(m)-trie::sum_pre(1);
	const int M=m>>1;
	if(g(1)<f(1)){
		int l=1,r=M,mid;
		while(l<r)
		{
			mid=(l+r+1)>>1;
			if(g(mid)<f(mid)){
				l=mid;
			}
			else{
				r=mid-1;
			}
		}
		res-=qry(1,l);
	}
	if(m>2&&g(m-1)<f(m-1)){
		int l=M+1,r=m-1,mid;
		while(l<r)
		{
			mid=(l+r)>>1;
			if(g(mid)<f(mid)){
				r=mid;
			}
			else{
				l=mid+1;
			}
		}
		res-=qry(r,m-1);
	}
	return res;
}
inline void solve(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		long long x;
		scanf("%lld",&x);
		if(!vis[x]){
			vis[x]=true;
			trie::ins(x);
		}
		else{
			vis[x]=false;
			trie::ers(x);
		}
		if(m<=1){
			puts("0");
			continue;
		}
		printf("%lld\n",calc());
	}
}
signed main(){
	freopen("kte.in","r",stdin);
	freopen("kte.out","w",stdout);
	#ifdef LOCAL
	atexit([](){fprintf(stderr,"%.3lfs\n",(double)clock()/CLOCKS_PER_SEC);});
	#endif
	solve();
	return 0;
}